package io.lkt.modules.sys.service.impl;

import io.lkt.modules.sys.entity.BUserRelateArticleTypeInfo;
import io.lkt.modules.sys.dao.BUserRelateArticleTypeInfoDao;
import io.lkt.modules.sys.service.BUserRelateArticleTypeInfoService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * 用户级别的类型关联信息表(BUserRelateArticleTypeInfo)表服务实现类
 *
 * @author makejava
 * @since 2020-07-19 19:07:16
 */
@Service("bUserRelateArticleTypeInfoService")
public class BUserRelateArticleTypeInfoServiceImpl implements BUserRelateArticleTypeInfoService {
    @Resource
    private BUserRelateArticleTypeInfoDao bUserRelateArticleTypeInfoDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public BUserRelateArticleTypeInfo queryById(Integer id) {
        return this.bUserRelateArticleTypeInfoDao.queryById(id);
    }

    @Override
    public String getArticleTypeByUserId(Integer userId) {
        return this.bUserRelateArticleTypeInfoDao.getArticleTypeByUserId(userId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    @Override
    public List<BUserRelateArticleTypeInfo> queryAllByLimit(int offset, int limit) {
        return this.bUserRelateArticleTypeInfoDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param bUserRelateArticleTypeInfo 实例对象
     * @return 实例对象
     */
    @Override
    public BUserRelateArticleTypeInfo insert(BUserRelateArticleTypeInfo bUserRelateArticleTypeInfo) {
        this.bUserRelateArticleTypeInfoDao.insert(bUserRelateArticleTypeInfo);
        return bUserRelateArticleTypeInfo;
    }

    /**
     * 修改数据
     *
     * @param bUserRelateArticleTypeInfo 实例对象
     * @return 实例对象
     */
    @Override
    public BUserRelateArticleTypeInfo update(BUserRelateArticleTypeInfo bUserRelateArticleTypeInfo) {
        this.bUserRelateArticleTypeInfoDao.update(bUserRelateArticleTypeInfo);
        return this.queryById(bUserRelateArticleTypeInfo.getId());
    }

    @Override
    public BUserRelateArticleTypeInfo updateTypeId(BUserRelateArticleTypeInfo bUserRelateArticleTypeInfo) {
        return null;
    }


    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return this.bUserRelateArticleTypeInfoDao.deleteById(id) > 0;
    }

    @Override
    public void updateTypeStrId(Integer userId, String articleTypeIds) {
        //先将用户当前所有分类设置为无效
        bUserRelateArticleTypeInfoDao.updateUserArticleTypeStatus(userId);

        //查询用户对当前分类的设置情况
        BUserRelateArticleTypeInfo bUserRelateArticleTypeInfo = new BUserRelateArticleTypeInfo();
        bUserRelateArticleTypeInfo.setUserId(userId);
        bUserRelateArticleTypeInfo.setArticleTypeIds(articleTypeIds);
        BUserRelateArticleTypeInfo articleTypeStatusInfo = bUserRelateArticleTypeInfoDao.queryUserArticleTypeStatusInfo(bUserRelateArticleTypeInfo);

        //如果分类不存在，则直接添加
        if (articleTypeStatusInfo == null) {
            BUserRelateArticleTypeInfo addArticleType = new BUserRelateArticleTypeInfo();
            addArticleType.setUserId(userId);
            addArticleType.setArticleTypeIds(articleTypeIds);
            addArticleType.setRelateTypeStatus(1);
            addArticleType.setModifyTime(new Date());
            bUserRelateArticleTypeInfoDao.insert(addArticleType);
        }
        else {
            //如果分类为无效状态，则进行修改
            int relateTypeStatus = Optional.ofNullable(articleTypeStatusInfo.getRelateTypeStatus()).orElse(0);
            if (relateTypeStatus == 0) {
                BUserRelateArticleTypeInfo updateArticleType = new BUserRelateArticleTypeInfo();
                updateArticleType.setId(articleTypeStatusInfo.getId());
                updateArticleType.setArticleTypeIds(articleTypeIds);
                updateArticleType.setRelateTypeStatus(1);
                updateArticleType.setModifyTime(new Date());
                bUserRelateArticleTypeInfoDao.update(updateArticleType);
            }

        }


    }

}

